﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Sistema;
using Entidades.Sistema.Venta;

namespace Mapping.Sistema.Venta
{
    public static class MappingCliente
    {
        public static List<Cliente> ConsultarClientes()
        {
            try
            {
                SqlCommand cmdClientes = new SqlCommand();
                cmdClientes.CommandText = "sp_ConsultarCliente";
                cmdClientes.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdClientes.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                SqlDataReader drClientes = cmdClientes.ExecuteReader();

                List<Cliente> ColClientes = new List<Cliente>();

                while (drClientes.Read())
                {
                    Cliente oCliente = new Cliente();
                    oCliente.IdCliente = Convert.ToInt32(drClientes["Id_Cliente"]);
                    oCliente.Nombre = drClientes["NombreCliente"].ToString();
                    oCliente.Cuit = drClientes["Cuit"].ToString();
                    oCliente.Email = drClientes["Email"].ToString();
                    oCliente.Telefono = drClientes["Telefono"].ToString();
                    oCliente.Fax = drClientes["Fax"].ToString();
                    oCliente.Calle = drClientes["Calle"].ToString();
                    oCliente.NroCalle = Convert.ToInt32(drClientes["NroCalle"]);
                    oCliente.Piso = Convert.ToInt32(drClientes["Piso"]);
                    oCliente.Departamento = drClientes["Departamento"].ToString();
                    oCliente.TipoCliente.IdTipoCliente = Convert.ToInt32(drClientes["IdTipoCliente"]);
                    oCliente.TipoCliente.Nombre = drClientes["NombreTipoCliente"].ToString();
                    oCliente.CondicionIva.IdCondicionIva = Convert.ToInt32(drClientes["IdCondicionIva"]);
                    oCliente.CondicionIva.Nombre = drClientes["NombreCondicionIva"].ToString();
                    oCliente.Barrio.IdBarrio = Convert.ToInt32(drClientes["IdBarrio"]);
                    oCliente.Barrio.Nombre = drClientes["NombreBarrio"].ToString();
                    oCliente.Barrio.Localidad.IdLocalidad = Convert.ToInt32(drClientes["IdLocalidad"]);
                    oCliente.Barrio.Localidad.Nombre = drClientes["NombreLocalidad"].ToString();
                    oCliente.Barrio.Localidad.CodigoPostal = Convert.ToInt32(drClientes["CodigoPostal"]);
                    oCliente.Barrio.Localidad.Provincia.IdProvincia = Convert.ToInt32(drClientes["IdProvincia"]);
                    oCliente.Barrio.Localidad.Provincia.Nombre = drClientes["NombreProvincia"].ToString();

                    ColClientes.Add(oCliente);
                }
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColClientes;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static bool AgregarCliente(Cliente oCliente)
        {
            SqlCommand cmdCliente = new SqlCommand();
            cmdCliente.CommandText = "sp_AgregarCliente";
            cmdCliente.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdCliente.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdCliente.Parameters.Add("@Id_Cliente", System.Data.SqlDbType.Int).Value = oCliente.IdCliente;
            cmdCliente.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Nombre;
            cmdCliente.Parameters.Add("@Cuit", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Cuit;
            cmdCliente.Parameters.Add("@Email", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Email;
            cmdCliente.Parameters.Add("@Telefono", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Telefono;
            cmdCliente.Parameters.Add("@Fax", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Fax;
            cmdCliente.Parameters.Add("@Calle", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Calle;
            cmdCliente.Parameters.Add("@NroCalle", System.Data.SqlDbType.Int).Value = oCliente.NroCalle;
            cmdCliente.Parameters.Add("@Piso", System.Data.SqlDbType.Int).Value = oCliente.Piso;
            cmdCliente.Parameters.Add("@Departamento", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Departamento;
            cmdCliente.Parameters.Add("@Id_TipoCliente", System.Data.SqlDbType.Int).Value = oCliente.TipoCliente.IdTipoCliente;
            cmdCliente.Parameters.Add("@Id_CondicionIva", System.Data.SqlDbType.Int).Value = oCliente.CondicionIva.IdCondicionIva;
            cmdCliente.Parameters.Add("@Id_Barrio", System.Data.SqlDbType.Int).Value = oCliente.Barrio.IdBarrio;
            cmdCliente.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }

        public static int ModificarCliente(Cliente oCliente)
        {
            SqlCommand cmdCliente = new SqlCommand();
            cmdCliente.CommandText = "sp_ModificarCliente";
            cmdCliente.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdCliente.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdCliente.Parameters.Add("@Id_Cliente", System.Data.SqlDbType.Int).Value = oCliente.IdCliente;
            cmdCliente.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oCliente.Nombre;
            cmdCliente.Parameters.Add("@Cuit", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Cuit;
            cmdCliente.Parameters.Add("@Email", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Email;
            cmdCliente.Parameters.Add("@Telefono", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Telefono;
            cmdCliente.Parameters.Add("@Fax", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Fax;
            cmdCliente.Parameters.Add("@Calle", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Calle;
            cmdCliente.Parameters.Add("@NroCalle", System.Data.SqlDbType.Int).Value = oCliente.NroCalle;
            cmdCliente.Parameters.Add("@Piso", System.Data.SqlDbType.Int).Value = oCliente.Piso;
            cmdCliente.Parameters.Add("@Departamento", System.Data.SqlDbType.VarChar, 50).Value = oCliente.Departamento;
            cmdCliente.Parameters.Add("@Id_TipoCliente", System.Data.SqlDbType.Int).Value = oCliente.TipoCliente.IdTipoCliente;
            cmdCliente.Parameters.Add("@Id_CondicionIva", System.Data.SqlDbType.Int).Value = oCliente.CondicionIva.IdCondicionIva;
            cmdCliente.Parameters.Add("@Id_Barrio", System.Data.SqlDbType.Int).Value = oCliente.Barrio.IdBarrio;
            //int nro = Convert.ToInt32(cmdCliente.ExecuteScalar());

            cmdCliente.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return 0;
        }

        public static bool EliminarCliente(Cliente oCliente)
        {
            SqlCommand cmdEliminarCliente = new SqlCommand();
            cmdEliminarCliente.CommandText = "sp_EliminarCliente";
            cmdEliminarCliente.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarCliente.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarCliente.Parameters.Add("@Id_Cliente", System.Data.SqlDbType.Int).Value = oCliente.IdCliente;
            cmdEliminarCliente.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return true;
        }
    }
}
